package com.biosimilarity.naturalselection.model.dataset;
import com.biosimilarity.naturalselection.model.dataset.Absyn.*;
/** BNFC-Generated Composition Visitor
*/

public class ComposVisitor<A> implements
  com.biosimilarity.naturalselection.model.dataset.Absyn.RecordExpr.Visitor<com.biosimilarity.naturalselection.model.dataset.Absyn.RecordExpr,A>,
  com.biosimilarity.naturalselection.model.dataset.Absyn.Binding.Visitor<com.biosimilarity.naturalselection.model.dataset.Absyn.Binding,A>,
  com.biosimilarity.naturalselection.model.dataset.Absyn.RecordPtn.Visitor<com.biosimilarity.naturalselection.model.dataset.Absyn.RecordPtn,A>,
  com.biosimilarity.naturalselection.model.dataset.Absyn.RecordVariable.Visitor<com.biosimilarity.naturalselection.model.dataset.Absyn.RecordVariable,A>,
  com.biosimilarity.naturalselection.model.dataset.Absyn.CollectionExpr.Visitor<com.biosimilarity.naturalselection.model.dataset.Absyn.CollectionExpr,A>,
  com.biosimilarity.naturalselection.model.dataset.Absyn.FieldFormals.Visitor<com.biosimilarity.naturalselection.model.dataset.Absyn.FieldFormals,A>,
  com.biosimilarity.naturalselection.model.dataset.Absyn.ExtensionBodyExpr.Visitor<com.biosimilarity.naturalselection.model.dataset.Absyn.ExtensionBodyExpr,A>,
  com.biosimilarity.naturalselection.model.dataset.Absyn.IntensionBodyExpr.Visitor<com.biosimilarity.naturalselection.model.dataset.Absyn.IntensionBodyExpr,A>,
  com.biosimilarity.naturalselection.model.dataset.Absyn.FieldExpr.Visitor<com.biosimilarity.naturalselection.model.dataset.Absyn.FieldExpr,A>,
  com.biosimilarity.naturalselection.model.dataset.Absyn.FieldName.Visitor<com.biosimilarity.naturalselection.model.dataset.Absyn.FieldName,A>,
  com.biosimilarity.naturalselection.model.dataset.Absyn.TupleExpr.Visitor<com.biosimilarity.naturalselection.model.dataset.Absyn.TupleExpr,A>,
  com.biosimilarity.naturalselection.model.dataset.Absyn.TupleDeclOrCond.Visitor<com.biosimilarity.naturalselection.model.dataset.Absyn.TupleDeclOrCond,A>,
  com.biosimilarity.naturalselection.model.dataset.Absyn.TuplePtn.Visitor<com.biosimilarity.naturalselection.model.dataset.Absyn.TuplePtn,A>,
  com.biosimilarity.naturalselection.model.dataset.Absyn.TupleGen.Visitor<com.biosimilarity.naturalselection.model.dataset.Absyn.TupleGen,A>,
  com.biosimilarity.naturalselection.model.dataset.Absyn.TupleCond.Visitor<com.biosimilarity.naturalselection.model.dataset.Absyn.TupleCond,A>,
  com.biosimilarity.naturalselection.model.dataset.Absyn.TupleCondition.Visitor<com.biosimilarity.naturalselection.model.dataset.Absyn.TupleCondition,A>,
  com.biosimilarity.naturalselection.model.dataset.Absyn.StructureTupleCondition.Visitor<com.biosimilarity.naturalselection.model.dataset.Absyn.StructureTupleCondition,A>,
  com.biosimilarity.naturalselection.model.dataset.Absyn.GroundTupleCondition.Visitor<com.biosimilarity.naturalselection.model.dataset.Absyn.GroundTupleCondition,A>,
  com.biosimilarity.naturalselection.model.dataset.Absyn.ValueCondition.Visitor<com.biosimilarity.naturalselection.model.dataset.Absyn.ValueCondition,A>,
  com.biosimilarity.naturalselection.model.dataset.Absyn.GroundValueCondition.Visitor<com.biosimilarity.naturalselection.model.dataset.Absyn.GroundValueCondition,A>,
  com.biosimilarity.naturalselection.model.dataset.Absyn.StructureValueCondition.Visitor<com.biosimilarity.naturalselection.model.dataset.Absyn.StructureValueCondition,A>,
  com.biosimilarity.naturalselection.model.dataset.Absyn.RecordCondition.Visitor<com.biosimilarity.naturalselection.model.dataset.Absyn.RecordCondition,A>,
  com.biosimilarity.naturalselection.model.dataset.Absyn.LogicalGround.Visitor<com.biosimilarity.naturalselection.model.dataset.Absyn.LogicalGround,A>,
  com.biosimilarity.naturalselection.model.dataset.Absyn.FieldType.Visitor<com.biosimilarity.naturalselection.model.dataset.Absyn.FieldType,A>,
  com.biosimilarity.naturalselection.model.dataset.Absyn.TypeExpr.Visitor<com.biosimilarity.naturalselection.model.dataset.Absyn.TypeExpr,A>,
  com.biosimilarity.naturalselection.model.dataset.Absyn.CollType.Visitor<com.biosimilarity.naturalselection.model.dataset.Absyn.CollType,A>,
  com.biosimilarity.naturalselection.model.dataset.Absyn.TypeName.Visitor<com.biosimilarity.naturalselection.model.dataset.Absyn.TypeName,A>,
  com.biosimilarity.naturalselection.model.dataset.Absyn.GroundType.Visitor<com.biosimilarity.naturalselection.model.dataset.Absyn.GroundType,A>,
  com.biosimilarity.naturalselection.model.dataset.Absyn.TypeFormals.Visitor<com.biosimilarity.naturalselection.model.dataset.Absyn.TypeFormals,A>,
  com.biosimilarity.naturalselection.model.dataset.Absyn.Comparison.Visitor<com.biosimilarity.naturalselection.model.dataset.Absyn.Comparison,A>,
  com.biosimilarity.naturalselection.model.dataset.Absyn.ValueExpr.Visitor<com.biosimilarity.naturalselection.model.dataset.Absyn.ValueExpr,A>,
  com.biosimilarity.naturalselection.model.dataset.Absyn.ValueVariable.Visitor<com.biosimilarity.naturalselection.model.dataset.Absyn.ValueVariable,A>,
  com.biosimilarity.naturalselection.model.dataset.Absyn.ValueLiteral.Visitor<com.biosimilarity.naturalselection.model.dataset.Absyn.ValueLiteral,A>
{
/* RecordExpr */
    public RecordExpr visit(com.biosimilarity.naturalselection.model.dataset.Absyn.Joined p, A arg)
    {
      RecordExpr recordexpr_1 = p.recordexpr_1.accept(this, arg);
      RecordExpr recordexpr_2 = p.recordexpr_2.accept(this, arg);

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.Joined(recordexpr_1, recordexpr_2);
    }
    public RecordExpr visit(com.biosimilarity.naturalselection.model.dataset.Absyn.Isolated p, A arg)
    {
      RecordExpr recordexpr_1 = p.recordexpr_1.accept(this, arg);
      RecordExpr recordexpr_2 = p.recordexpr_2.accept(this, arg);

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.Isolated(recordexpr_1, recordexpr_2);
    }
    public RecordExpr visit(com.biosimilarity.naturalselection.model.dataset.Absyn.Consed p, A arg)
    {
      TupleExpr tupleexpr_ = p.tupleexpr_.accept(this, arg);
      RecordExpr recordexpr_ = p.recordexpr_.accept(this, arg);

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.Consed(tupleexpr_, recordexpr_);
    }
    public RecordExpr visit(com.biosimilarity.naturalselection.model.dataset.Absyn.Contexted p, A arg)
    {
      ListBinding listbinding_ = new ListBinding();
      for (Binding x : p.listbinding_) {
        listbinding_.add(x.accept(this,arg));
      }
      RecordExpr recordexpr_ = p.recordexpr_.accept(this, arg);

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.Contexted(listbinding_, recordexpr_);
    }
    public RecordExpr visit(com.biosimilarity.naturalselection.model.dataset.Absyn.Referenced p, A arg)
    {
      RecordVariable recordvariable_ = p.recordvariable_.accept(this, arg);

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.Referenced(recordvariable_);
    }
    public RecordExpr visit(com.biosimilarity.naturalselection.model.dataset.Absyn.Collected p, A arg)
    {
      CollectionExpr collectionexpr_ = p.collectionexpr_.accept(this, arg);

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.Collected(collectionexpr_);
    }
    public RecordExpr visit(com.biosimilarity.naturalselection.model.dataset.Absyn.Emptied p, A arg)
    {

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.Emptied();
    }

/* Binding */
    public Binding visit(com.biosimilarity.naturalselection.model.dataset.Absyn.BindingExpr p, A arg)
    {
      RecordPtn recordptn_1 = p.recordptn_1.accept(this, arg);
      RecordPtn recordptn_2 = p.recordptn_2.accept(this, arg);

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.BindingExpr(recordptn_1, recordptn_2);
    }

/* RecordPtn */
    public RecordPtn visit(com.biosimilarity.naturalselection.model.dataset.Absyn.RecordDestructor p, A arg)
    {
      ListTuplePtn listtupleptn_ = new ListTuplePtn();
      for (TuplePtn x : p.listtupleptn_) {
        listtupleptn_.add(x.accept(this,arg));
      }
      RecordPtn recordptn_ = p.recordptn_.accept(this, arg);

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.RecordDestructor(listtupleptn_, recordptn_);
    }
    public RecordPtn visit(com.biosimilarity.naturalselection.model.dataset.Absyn.RecordLiteral p, A arg)
    {
      RecordExpr recordexpr_ = p.recordexpr_.accept(this, arg);

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.RecordLiteral(recordexpr_);
    }

/* RecordVariable */
    public RecordVariable visit(com.biosimilarity.naturalselection.model.dataset.Absyn.RecordIdent p, A arg)
    {
      String uident_ = p.uident_;

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.RecordIdent(uident_);
    }
    public RecordVariable visit(com.biosimilarity.naturalselection.model.dataset.Absyn.RecordWild p, A arg)
    {

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.RecordWild();
    }

/* CollectionExpr */
    public CollectionExpr visit(com.biosimilarity.naturalselection.model.dataset.Absyn.Extension p, A arg)
    {
      FieldFormals fieldformals_ = p.fieldformals_.accept(this, arg);
      ExtensionBodyExpr extensionbodyexpr_ = p.extensionbodyexpr_.accept(this, arg);

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.Extension(fieldformals_, extensionbodyexpr_);
    }
    public CollectionExpr visit(com.biosimilarity.naturalselection.model.dataset.Absyn.Intension p, A arg)
    {
      FieldFormals fieldformals_ = p.fieldformals_.accept(this, arg);
      IntensionBodyExpr intensionbodyexpr_ = p.intensionbodyexpr_.accept(this, arg);

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.Intension(fieldformals_, intensionbodyexpr_);
    }

/* FieldFormals */
    public FieldFormals visit(com.biosimilarity.naturalselection.model.dataset.Absyn.FieldFormalSpec p, A arg)
    {
      ListFieldExpr listfieldexpr_ = new ListFieldExpr();
      for (FieldExpr x : p.listfieldexpr_) {
        listfieldexpr_.add(x.accept(this,arg));
      }

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.FieldFormalSpec(listfieldexpr_);
    }

/* ExtensionBodyExpr */
    public ExtensionBodyExpr visit(com.biosimilarity.naturalselection.model.dataset.Absyn.ExtensionBody p, A arg)
    {
      ListTupleExpr listtupleexpr_ = new ListTupleExpr();
      for (TupleExpr x : p.listtupleexpr_) {
        listtupleexpr_.add(x.accept(this,arg));
      }

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.ExtensionBody(listtupleexpr_);
    }

/* IntensionBodyExpr */
    public IntensionBodyExpr visit(com.biosimilarity.naturalselection.model.dataset.Absyn.IntensionBody p, A arg)
    {
      TuplePtn tupleptn_ = p.tupleptn_.accept(this, arg);
      ListTupleDeclOrCond listtupledeclorcond_ = new ListTupleDeclOrCond();
      for (TupleDeclOrCond x : p.listtupledeclorcond_) {
        listtupledeclorcond_.add(x.accept(this,arg));
      }

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.IntensionBody(tupleptn_, listtupledeclorcond_);
    }

/* FieldExpr */
    public FieldExpr visit(com.biosimilarity.naturalselection.model.dataset.Absyn.FieldDecl p, A arg)
    {
      FieldName fieldname_ = p.fieldname_.accept(this, arg);
      FieldType fieldtype_ = p.fieldtype_.accept(this, arg);

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.FieldDecl(fieldname_, fieldtype_);
    }
    public FieldExpr visit(com.biosimilarity.naturalselection.model.dataset.Absyn.FieldActual p, A arg)
    {
      FieldName fieldname_ = p.fieldname_.accept(this, arg);

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.FieldActual(fieldname_);
    }

/* FieldName */
    public FieldName visit(com.biosimilarity.naturalselection.model.dataset.Absyn.FieldIdent p, A arg)
    {
      String uident_ = p.uident_;

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.FieldIdent(uident_);
    }

/* TupleExpr */
    public TupleExpr visit(com.biosimilarity.naturalselection.model.dataset.Absyn.TupleSumExpr p, A arg)
    {
      TupleExpr tupleexpr_1 = p.tupleexpr_1.accept(this, arg);
      TupleExpr tupleexpr_2 = p.tupleexpr_2.accept(this, arg);

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.TupleSumExpr(tupleexpr_1, tupleexpr_2);
    }
    public TupleExpr visit(com.biosimilarity.naturalselection.model.dataset.Absyn.TupleBaseExpr p, A arg)
    {
      ListValueExpr listvalueexpr_ = new ListValueExpr();
      for (ValueExpr x : p.listvalueexpr_) {
        listvalueexpr_.add(x.accept(this,arg));
      }

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.TupleBaseExpr(listvalueexpr_);
    }
    public TupleExpr visit(com.biosimilarity.naturalselection.model.dataset.Absyn.TupleMultExpr p, A arg)
    {
      TupleExpr tupleexpr_1 = p.tupleexpr_1.accept(this, arg);
      TupleExpr tupleexpr_2 = p.tupleexpr_2.accept(this, arg);

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.TupleMultExpr(tupleexpr_1, tupleexpr_2);
    }

/* TupleDeclOrCond */
    public TupleDeclOrCond visit(com.biosimilarity.naturalselection.model.dataset.Absyn.ConditionIn p, A arg)
    {
      TupleCond tuplecond_ = p.tuplecond_.accept(this, arg);

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.ConditionIn(tuplecond_);
    }
    public TupleDeclOrCond visit(com.biosimilarity.naturalselection.model.dataset.Absyn.DeclIn p, A arg)
    {
      TupleGen tuplegen_ = p.tuplegen_.accept(this, arg);

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.DeclIn(tuplegen_);
    }

/* TuplePtn */
    public TuplePtn visit(com.biosimilarity.naturalselection.model.dataset.Absyn.TuplePtnExpr p, A arg)
    {
      ListValueExpr listvalueexpr_ = new ListValueExpr();
      for (ValueExpr x : p.listvalueexpr_) {
        listvalueexpr_.add(x.accept(this,arg));
      }

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.TuplePtnExpr(listvalueexpr_);
    }

/* TupleGen */
    public TupleGen visit(com.biosimilarity.naturalselection.model.dataset.Absyn.TupleGenExpr p, A arg)
    {
      TuplePtn tupleptn_ = p.tupleptn_.accept(this, arg);
      RecordExpr recordexpr_ = p.recordexpr_.accept(this, arg);

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.TupleGenExpr(tupleptn_, recordexpr_);
    }

/* TupleCond */
    public TupleCond visit(com.biosimilarity.naturalselection.model.dataset.Absyn.TupleSatExpr p, A arg)
    {
      TuplePtn tupleptn_ = p.tupleptn_.accept(this, arg);
      TupleCondition tuplecondition_ = p.tuplecondition_.accept(this, arg);

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.TupleSatExpr(tupleptn_, tuplecondition_);
    }
    public TupleCond visit(com.biosimilarity.naturalselection.model.dataset.Absyn.TupleCompExpr p, A arg)
    {
      ValueExpr valueexpr_1 = p.valueexpr_1.accept(this, arg);
      Comparison comparison_ = p.comparison_.accept(this, arg);
      ValueExpr valueexpr_2 = p.valueexpr_2.accept(this, arg);

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.TupleCompExpr(valueexpr_1, comparison_, valueexpr_2);
    }

/* TupleCondition */
    public TupleCondition visit(com.biosimilarity.naturalselection.model.dataset.Absyn.DisjunctTupleCondition p, A arg)
    {
      TupleCondition tuplecondition_1 = p.tuplecondition_1.accept(this, arg);
      TupleCondition tuplecondition_2 = p.tuplecondition_2.accept(this, arg);

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.DisjunctTupleCondition(tuplecondition_1, tuplecondition_2);
    }
    public TupleCondition visit(com.biosimilarity.naturalselection.model.dataset.Absyn.ConjunctTupleCondition p, A arg)
    {
      TupleCondition tuplecondition_1 = p.tuplecondition_1.accept(this, arg);
      TupleCondition tuplecondition_2 = p.tuplecondition_2.accept(this, arg);

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.ConjunctTupleCondition(tuplecondition_1, tuplecondition_2);
    }
    public TupleCondition visit(com.biosimilarity.naturalselection.model.dataset.Absyn.NegatedTupleCondition p, A arg)
    {
      TupleCondition tuplecondition_ = p.tuplecondition_.accept(this, arg);

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.NegatedTupleCondition(tuplecondition_);
    }
    public TupleCondition visit(com.biosimilarity.naturalselection.model.dataset.Absyn.StructuralTupleCondition p, A arg)
    {
      StructureTupleCondition structuretuplecondition_ = p.structuretuplecondition_.accept(this, arg);

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.StructuralTupleCondition(structuretuplecondition_);
    }
    public TupleCondition visit(com.biosimilarity.naturalselection.model.dataset.Absyn.BaseTupleCondition p, A arg)
    {
      GroundTupleCondition groundtuplecondition_ = p.groundtuplecondition_.accept(this, arg);

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.BaseTupleCondition(groundtuplecondition_);
    }

/* StructureTupleCondition */
    public StructureTupleCondition visit(com.biosimilarity.naturalselection.model.dataset.Absyn.TupleValCond p, A arg)
    {
      ListValueCondition listvaluecondition_ = new ListValueCondition();
      for (ValueCondition x : p.listvaluecondition_) {
        listvaluecondition_.add(x.accept(this,arg));
      }

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.TupleValCond(listvaluecondition_);
    }

/* GroundTupleCondition */
    public GroundTupleCondition visit(com.biosimilarity.naturalselection.model.dataset.Absyn.TupleLogicGround p, A arg)
    {
      LogicalGround logicalground_ = p.logicalground_.accept(this, arg);

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.TupleLogicGround(logicalground_);
    }

/* ValueCondition */
    public ValueCondition visit(com.biosimilarity.naturalselection.model.dataset.Absyn.DisjunctValueCondition p, A arg)
    {
      ValueCondition valuecondition_1 = p.valuecondition_1.accept(this, arg);
      ValueCondition valuecondition_2 = p.valuecondition_2.accept(this, arg);

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.DisjunctValueCondition(valuecondition_1, valuecondition_2);
    }
    public ValueCondition visit(com.biosimilarity.naturalselection.model.dataset.Absyn.ConjunctValueCondition p, A arg)
    {
      ValueCondition valuecondition_1 = p.valuecondition_1.accept(this, arg);
      ValueCondition valuecondition_2 = p.valuecondition_2.accept(this, arg);

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.ConjunctValueCondition(valuecondition_1, valuecondition_2);
    }
    public ValueCondition visit(com.biosimilarity.naturalselection.model.dataset.Absyn.NegatedValueCondition p, A arg)
    {
      ValueCondition valuecondition_ = p.valuecondition_.accept(this, arg);

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.NegatedValueCondition(valuecondition_);
    }
    public ValueCondition visit(com.biosimilarity.naturalselection.model.dataset.Absyn.StructuralValueCondition p, A arg)
    {
      StructureValueCondition structurevaluecondition_ = p.structurevaluecondition_.accept(this, arg);

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.StructuralValueCondition(structurevaluecondition_);
    }
    public ValueCondition visit(com.biosimilarity.naturalselection.model.dataset.Absyn.BaseValueCondition p, A arg)
    {
      GroundValueCondition groundvaluecondition_ = p.groundvaluecondition_.accept(this, arg);

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.BaseValueCondition(groundvaluecondition_);
    }

/* GroundValueCondition */
    public GroundValueCondition visit(com.biosimilarity.naturalselection.model.dataset.Absyn.ValueLogicGround p, A arg)
    {
      LogicalGround logicalground_ = p.logicalground_.accept(this, arg);

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.ValueLogicGround(logicalground_);
    }

/* StructureValueCondition */
    public StructureValueCondition visit(com.biosimilarity.naturalselection.model.dataset.Absyn.ValueRecCond p, A arg)
    {
      RecordCondition recordcondition_ = p.recordcondition_.accept(this, arg);

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.ValueRecCond(recordcondition_);
    }
    public StructureValueCondition visit(com.biosimilarity.naturalselection.model.dataset.Absyn.ValueListCond p, A arg)
    {
      ListValueCondition listvaluecondition_ = new ListValueCondition();
      for (ValueCondition x : p.listvaluecondition_) {
        listvaluecondition_.add(x.accept(this,arg));
      }

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.ValueListCond(listvaluecondition_);
    }
    public StructureValueCondition visit(com.biosimilarity.naturalselection.model.dataset.Absyn.ValueSetCond p, A arg)
    {
      ListValueCondition listvaluecondition_ = new ListValueCondition();
      for (ValueCondition x : p.listvaluecondition_) {
        listvaluecondition_.add(x.accept(this,arg));
      }

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.ValueSetCond(listvaluecondition_);
    }
    public StructureValueCondition visit(com.biosimilarity.naturalselection.model.dataset.Absyn.ValueLitCond p, A arg)
    {
      ValueLiteral valueliteral_ = p.valueliteral_.accept(this, arg);

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.ValueLitCond(valueliteral_);
    }

/* RecordCondition */
    public RecordCondition visit(com.biosimilarity.naturalselection.model.dataset.Absyn.ValueRecBodyCond p, A arg)
    {
      ListTupleCondition listtuplecondition_ = new ListTupleCondition();
      for (TupleCondition x : p.listtuplecondition_) {
        listtuplecondition_.add(x.accept(this,arg));
      }
      RecordCondition recordcondition_ = p.recordcondition_.accept(this, arg);

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.ValueRecBodyCond(listtuplecondition_, recordcondition_);
    }

/* LogicalGround */
    public LogicalGround visit(com.biosimilarity.naturalselection.model.dataset.Absyn.Verity p, A arg)
    {

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.Verity();
    }
    public LogicalGround visit(com.biosimilarity.naturalselection.model.dataset.Absyn.Absurdity p, A arg)
    {

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.Absurdity();
    }
    public LogicalGround visit(com.biosimilarity.naturalselection.model.dataset.Absyn.Nullity p, A arg)
    {

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.Nullity();
    }

/* FieldType */
    public FieldType visit(com.biosimilarity.naturalselection.model.dataset.Absyn.FieldTypeExpr p, A arg)
    {
      TypeExpr typeexpr_ = p.typeexpr_.accept(this, arg);

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.FieldTypeExpr(typeexpr_);
    }

/* TypeExpr */
    public TypeExpr visit(com.biosimilarity.naturalselection.model.dataset.Absyn.ArrayTypeExpr p, A arg)
    {
      TypeExpr typeexpr_ = p.typeexpr_.accept(this, arg);
      Integer integer_ = p.integer_;

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.ArrayTypeExpr(typeexpr_, integer_);
    }
    public TypeExpr visit(com.biosimilarity.naturalselection.model.dataset.Absyn.RcrdTypeExpr p, A arg)
    {
      TypeFormals typeformals_ = p.typeformals_.accept(this, arg);
      ListTypeExpr listtypeexpr_ = new ListTypeExpr();
      for (TypeExpr x : p.listtypeexpr_) {
        listtypeexpr_.add(x.accept(this,arg));
      }

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.RcrdTypeExpr(typeformals_, listtypeexpr_);
    }
    public TypeExpr visit(com.biosimilarity.naturalselection.model.dataset.Absyn.RecTypeExpr p, A arg)
    {
      TypeName typename_ = p.typename_.accept(this, arg);
      TypeExpr typeexpr_ = p.typeexpr_.accept(this, arg);

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.RecTypeExpr(typename_, typeexpr_);
    }
    public TypeExpr visit(com.biosimilarity.naturalselection.model.dataset.Absyn.RefTypeExpr p, A arg)
    {
      TypeName typename_ = p.typename_.accept(this, arg);

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.RefTypeExpr(typename_);
    }
    public TypeExpr visit(com.biosimilarity.naturalselection.model.dataset.Absyn.CollTypeExpr p, A arg)
    {
      CollType colltype_ = p.colltype_.accept(this, arg);

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.CollTypeExpr(colltype_);
    }
    public TypeExpr visit(com.biosimilarity.naturalselection.model.dataset.Absyn.GroundTypeExpr p, A arg)
    {
      GroundType groundtype_ = p.groundtype_.accept(this, arg);

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.GroundTypeExpr(groundtype_);
    }

/* CollType */
    public CollType visit(com.biosimilarity.naturalselection.model.dataset.Absyn.LListTypeExpr p, A arg)
    {
      ListTypeExpr listtypeexpr_ = new ListTypeExpr();
      for (TypeExpr x : p.listtypeexpr_) {
        listtypeexpr_.add(x.accept(this,arg));
      }

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.LListTypeExpr(listtypeexpr_);
    }
    public CollType visit(com.biosimilarity.naturalselection.model.dataset.Absyn.SetTypeExpr p, A arg)
    {
      ListTypeExpr listtypeexpr_ = new ListTypeExpr();
      for (TypeExpr x : p.listtypeexpr_) {
        listtypeexpr_.add(x.accept(this,arg));
      }

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.SetTypeExpr(listtypeexpr_);
    }
    public CollType visit(com.biosimilarity.naturalselection.model.dataset.Absyn.TupleTypeExpr p, A arg)
    {
      ListTypeExpr listtypeexpr_ = new ListTypeExpr();
      for (TypeExpr x : p.listtypeexpr_) {
        listtypeexpr_.add(x.accept(this,arg));
      }

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.TupleTypeExpr(listtypeexpr_);
    }

/* TypeName */
    public TypeName visit(com.biosimilarity.naturalselection.model.dataset.Absyn.TypeIdent p, A arg)
    {
      String uident_ = p.uident_;

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.TypeIdent(uident_);
    }

/* GroundType */
    public GroundType visit(com.biosimilarity.naturalselection.model.dataset.Absyn.GroundInteger p, A arg)
    {

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.GroundInteger();
    }
    public GroundType visit(com.biosimilarity.naturalselection.model.dataset.Absyn.GroundDouble p, A arg)
    {

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.GroundDouble();
    }
    public GroundType visit(com.biosimilarity.naturalselection.model.dataset.Absyn.GroundString p, A arg)
    {

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.GroundString();
    }
    public GroundType visit(com.biosimilarity.naturalselection.model.dataset.Absyn.GroundChar p, A arg)
    {

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.GroundChar();
    }

/* TypeFormals */
    public TypeFormals visit(com.biosimilarity.naturalselection.model.dataset.Absyn.TypeParameters p, A arg)
    {
      ListTypeExpr listtypeexpr_ = new ListTypeExpr();
      for (TypeExpr x : p.listtypeexpr_) {
        listtypeexpr_.add(x.accept(this,arg));
      }

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.TypeParameters(listtypeexpr_);
    }

/* Comparison */
    public Comparison visit(com.biosimilarity.naturalselection.model.dataset.Absyn.Equality p, A arg)
    {

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.Equality();
    }
    public Comparison visit(com.biosimilarity.naturalselection.model.dataset.Absyn.Less p, A arg)
    {

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.Less();
    }
    public Comparison visit(com.biosimilarity.naturalselection.model.dataset.Absyn.More p, A arg)
    {

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.More();
    }
    public Comparison visit(com.biosimilarity.naturalselection.model.dataset.Absyn.LEq p, A arg)
    {

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.LEq();
    }
    public Comparison visit(com.biosimilarity.naturalselection.model.dataset.Absyn.GEq p, A arg)
    {

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.GEq();
    }

/* ValueExpr */
    public ValueExpr visit(com.biosimilarity.naturalselection.model.dataset.Absyn.ValueAddExpr p, A arg)
    {
      ValueExpr valueexpr_1 = p.valueexpr_1.accept(this, arg);
      ValueExpr valueexpr_2 = p.valueexpr_2.accept(this, arg);

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.ValueAddExpr(valueexpr_1, valueexpr_2);
    }
    public ValueExpr visit(com.biosimilarity.naturalselection.model.dataset.Absyn.ValueMultExpr p, A arg)
    {
      ValueExpr valueexpr_1 = p.valueexpr_1.accept(this, arg);
      ValueExpr valueexpr_2 = p.valueexpr_2.accept(this, arg);

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.ValueMultExpr(valueexpr_1, valueexpr_2);
    }
    public ValueExpr visit(com.biosimilarity.naturalselection.model.dataset.Absyn.ValueArrAccExpr p, A arg)
    {
      ValueExpr valueexpr_1 = p.valueexpr_1.accept(this, arg);
      ValueExpr valueexpr_2 = p.valueexpr_2.accept(this, arg);

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.ValueArrAccExpr(valueexpr_1, valueexpr_2);
    }
    public ValueExpr visit(com.biosimilarity.naturalselection.model.dataset.Absyn.ValueNegExpr p, A arg)
    {
      ValueExpr valueexpr_ = p.valueexpr_.accept(this, arg);

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.ValueNegExpr(valueexpr_);
    }
    public ValueExpr visit(com.biosimilarity.naturalselection.model.dataset.Absyn.ValueVarExpr p, A arg)
    {
      ValueVariable valuevariable_ = p.valuevariable_.accept(this, arg);

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.ValueVarExpr(valuevariable_);
    }
    public ValueExpr visit(com.biosimilarity.naturalselection.model.dataset.Absyn.ValueLitExpr p, A arg)
    {
      ValueLiteral valueliteral_ = p.valueliteral_.accept(this, arg);

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.ValueLitExpr(valueliteral_);
    }

/* ValueVariable */
    public ValueVariable visit(com.biosimilarity.naturalselection.model.dataset.Absyn.ValueIdent p, A arg)
    {
      String lident_ = p.lident_;

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.ValueIdent(lident_);
    }

/* ValueLiteral */
    public ValueLiteral visit(com.biosimilarity.naturalselection.model.dataset.Absyn.ValueRecLit p, A arg)
    {
      RecordExpr recordexpr_ = p.recordexpr_.accept(this, arg);

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.ValueRecLit(recordexpr_);
    }
    public ValueLiteral visit(com.biosimilarity.naturalselection.model.dataset.Absyn.ValueRecProjLit p, A arg)
    {
      RecordExpr recordexpr_ = p.recordexpr_.accept(this, arg);
      FieldExpr fieldexpr_ = p.fieldexpr_.accept(this, arg);

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.ValueRecProjLit(recordexpr_, fieldexpr_);
    }
    public ValueLiteral visit(com.biosimilarity.naturalselection.model.dataset.Absyn.ValueListLit p, A arg)
    {
      ListValueExpr listvalueexpr_ = new ListValueExpr();
      for (ValueExpr x : p.listvalueexpr_) {
        listvalueexpr_.add(x.accept(this,arg));
      }

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.ValueListLit(listvalueexpr_);
    }
    public ValueLiteral visit(com.biosimilarity.naturalselection.model.dataset.Absyn.ValueSetLit p, A arg)
    {
      ListValueExpr listvalueexpr_ = new ListValueExpr();
      for (ValueExpr x : p.listvalueexpr_) {
        listvalueexpr_.add(x.accept(this,arg));
      }

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.ValueSetLit(listvalueexpr_);
    }
    public ValueLiteral visit(com.biosimilarity.naturalselection.model.dataset.Absyn.ValueIntLit p, A arg)
    {
      Integer integer_ = p.integer_;

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.ValueIntLit(integer_);
    }
    public ValueLiteral visit(com.biosimilarity.naturalselection.model.dataset.Absyn.ValueDoubleLit p, A arg)
    {
      Double double_ = p.double_;

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.ValueDoubleLit(double_);
    }
    public ValueLiteral visit(com.biosimilarity.naturalselection.model.dataset.Absyn.ValueStringLit p, A arg)
    {
      String string_ = p.string_;

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.ValueStringLit(string_);
    }
    public ValueLiteral visit(com.biosimilarity.naturalselection.model.dataset.Absyn.ValueCharLit p, A arg)
    {
      Character char_ = p.char_;

      return new com.biosimilarity.naturalselection.model.dataset.Absyn.ValueCharLit(char_);
    }

}